home *** CD-ROM | disk | FTP | other *** search
-
- unit win_ver; {detect Windows = present, version, & mode }
- {NOTE: use post 3.1 version detection before pre 3.1}
- interface
- {post 3.1}
- procedure windows_version( var major, minor : byte );
- procedure windows_mode( var mode : byte );
- {pre 3.1}
- procedure enhanced_mode_present ( var present : boolean);
- procedure windows_present( var present : boolean );
- procedure windows_386_present( var present : boolean );
- procedure windows_3_0_mode( var mode : byte );
- implementation
- {win 3.1+ only}
- procedure windows_version( var major, minor : byte ); {0,0 = not detected}
- begin asm
- push es;
- mov ax, 160ah; int 2fh
-
- cmp ax,0
- je @windows_present
- @windows_not_present:
- mov byte ptr major, 0; mov byte ptr minor, 0
- jmp @end_procedure
- @windows_present:
- mov al, bh; les di, major; stosB
- mov al, bl; les di, minor; stosB
-
- @end_procedure:
- pop es
- end; end;
- {win 3.1+ only}
- procedure windows_mode(var mode : byte ); {0=unknown}
- begin asm
- push es
- mov ax, 160ah; int 2fh
-
- cmp ax,0
- jne @windows_not_present
- @windows_present:
- mov ax, cx;
- jmp @end_procedure
- @windows_not_present:
- mov ax, 0
- @end_procedure:
- les di, mode; stosB
- pop es
- end; end;
- {pre win 3.1}
- { ax=1600h := windows not running }
- { ax=80h or ffh := win/386 running }
- procedure enhanced_mode_present (var present : boolean);
- begin asm
- push es
- mov ax, 1600h; int 2fh
-
- cmp ax, 1600h
- jne @enhanced_mode_present
- @not_endhanced_mode:
- mov ax, 0
- jmp @end_function
- @enhanced_mode_present:
- mov ax, 0ffffh
-
- @end_function:
- les di, present; stosB
- pop es
- end; end;
- {pre win 3.1}
- {al = ff or 80 = windows/386 running}
- procedure windows_386_present( var present : boolean );
- begin asm
- push es
- mov ax,4680h; int 2fh
-
- cmp ax,0
- jne @not_present
- cmp al,0ffh
- je @present
- cmp al,080h
- jne @not_present
- @present:
- mov ax, 0ffffh
- jmp @end_procedure
- @not_present:
- mov ax, 0
-
- @end_procedure:
- les di, present; stosB
- pop es
- end; end;
- {pre win 3.1}
- procedure windows_present( var present : boolean );
- begin asm
- push es
- mov ax,4680h; int 2fh
-
- cmp ax,0
- jne @not_present
- @present:
- mov ax, 0ffffh
- jmp @end_function
- @not_present:
- mov ax, 0h
-
- @end_function:
- les di, present; stosB
- pop es
- end; end;
- { call only if 3.0 has been identified }
- { mode = 2 := real mode } { mode = 1 := standard mode }
- { mode = 0 := unknown }
- procedure windows_3_0_mode(var mode : byte);
- begin asm
- push es
- mov ax,1605h; xor cx,cx; int 2fh {simulate "windows restart"}
-
- cmp cx, 0ffffh
- jne @real_mode
- @standard_mode:
- mov ax, 2 { 2 = standard mode }
- jmp @end_procedure
- @real_mode:
- cmp cx,0
- je @is_real_mode
- mov ax, 0 { 0 = mode unknown }
- jmp @end_procedure
- @is_real_mode:
- mov ax, 1 { 1 = real mode }
-
- @end_procedure:
- les di, mode; stosB
- {termination notice should be here!}
- pop es
- end; end;
- end.
-
- { --------- Test driver for win_ver ---------------- }
-
- uses win_ver; var maj, min, mode : byte; bol:boolean;
- begin
- windows_version( maj, min );
- writeln(' win maj.min ',maj,'.',min);
- windows_mode( mode );
- writeln(' win mode :[3=enhance,2=standard,1=real(not_supported)] =',mode);
- enhanced_mode_present( bol );
- writeln(' enhanced mode? ',bol);
- windows_present( bol );
- writeln(' windows present (pre 3.1) ? ',bol);
- windows_386_present( bol );
- writeln(' windows 386 present(pre 3.1) ? ',bol);
- windows_3_0_mode( mode );
- writeln(' 3.0 mode [2 = standard, 1 = real, 0 = ?] = ',mode);
- end.